汇编push,pop |
您所在的位置:网站首页 › pop push指令 › 汇编push,pop |
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-08-24,00:40:12作者By-----溺心与沉浮----博客园 1、BASE,TOP是2个32位的通用寄存器,里面存储的是内存单元编号(内存地址). 2、BASE里面存储了一个地址,记录的起始地址. 3、TOP里面也存储了一个地址,记录的是结束的地址. 4、存入数据的时候,TOP的值减4(为方便演示,每次存取都是4个字节) 5、释放数据的时候,TOP的值加4(为方便演示,每次存取都是4个字节) 6、如果要读取中间的某个数据的时候可以通过TOP 或者 BASE 加上偏移的方式去读取 7、这种内存的读写方式有个学名:堆栈 堆栈的优点:临时存储大量的数据,便于查找.
在OD中红框位置,随机选取一个内存地址作为我们的栈底与栈顶,我已0x18FFD0为例,用EDX,EBX仿ESP,EBP MOV EDX,0x18FFD0 TOP MOV EBX,0x18FFD0 BASE 1、压入数据 压入数据的方法很多 方式一、 MOV DWORD PTR DS:[EDX-4],0xAAAAAAAA SUB EDX,4
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-08-24,00:40:12作者By-----溺心与沉浮----博客园
代码执行后:
后面的就不上图了 方式2、 SUB EDX,4 MOV DWORD PTR DS:[EDX],0xBBBBBBBB 方式3、 LEA EDX,DWORD PTR DS:[EDX-4] MOV DWORD PTR DS:[EDX],0xCCCCCCCC 方式4、 MOV DWORD PTR DS:[EDX-4],0xDDDDDDDD LEA EDX,DWORD PTR DS:[EDX-4]
步骤2、读取第N个数 方式1、通过BASE加偏移的形式来读取,读出来的值放到ESI中 读第一个压入的数据 MOV ESI,DWORD PTR DS:[EBX-4] 读第四个压入的数据 MOV ESI,DWORD PTR DS:[EBX-10] 方式2、通过TOP加偏移的形式来读取,读出来的值放到ESI中 读第一个压入的数据 MOV ESI,DWORD PTR DS:[EDX+10] 读第四个压入的数据 MOV ESI,DWORD PTR DS:[EDX+4]
步骤3、弹出数据 方法1、 MOV ECX,DWORD PTR DS:[EDX] ADD EDX,0x4 方法2、 LED EDX,DWORD PTR DS:[EDX+0x4] MOV ECX,DWORD PTR DS:[EDX-0x4] 方法3、 MOV ECX,DWORD PTR DS:[EDX] LEA EDX,DWORD PTR DS:[EDX+0x4]
push指令: 1、PUSH r32 2、PUSH r16 3、PUSH m16 4、PUSH m32 5、PUSH imm8/imm16/imm32 pop指令: 1、POP r32 2、POP r16 3、POP m16 4、POP m32 1、使用2种方式实现:push ecx 一、 MOV DWORD PTR DS:[ESP-0x4],0x1 LEA ESP,DWORD PTR DS:[ESP-0x4] 二、 LEA ESP,DWORD PTR DS:[ESP-0x4] MOV DWORD PTR DS:[ESP],0x1 三、 MOV DWORD PTR DS:[ESP-0x4],0x1 SUB ESP,0x4 四、 SUB ESP,0x4 MOV DWORD PTR DS:[ESP],0x1 2、使用2种方式实现:pop ecx 一、 ADD ESP,0x4 MOV EAX,DWORD PTR DS:[ESP-0x4] 二、 MOV EAX,DWORD PTR DS:[ESP] ADD ESP,0x4 三、 MOV EAX,DWORD PTR DS:[ESP] LEA ESP,DWORD PTR DS:[ESP+0x4] 四、 LEA ESP,DWORD PTR DS:[ESP+0x4] MOV EAX,DWORD PTR DS:[ESP-0x4] 3、使用2种方式实现:push esp 一、 MOV EAX,ESP MOV DWORD PTR DS:[ESP-4],EAX SUB ESP,4 二、 MOV DWORD PTR DS:[ESP-4],ESP SUB ESP,4 4、使用2种方式实现:pop esp 一、 MOV EAX,DWORD PTR DS:[ESP] MOV ESP,EAX 二、 MOV ESP,DWORD PTR DS:[ESP] 三、 ADD ESP,4 MOV ESP,DWORD PTR DS:[ESP-4]
push一定是减去4个字节吗? 答:不是,push可以对一个字的寄存器或者内存进行push,此时是2字节,对双字的寄存器或者内存进行push的时候,是4字节, 注意:push不能push一个字节的寄存器或者内存,pop同push
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-08-24,00:40:12作者By-----溺心与沉浮----博客园 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |